<!doctype html>



  


<html class="theme-next pisces use-motion">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />












  
  
  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  
    
      
    

    
  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Monda:300,300italic,400,400italic,700,700italic|consolas:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="面试整理," />





  <link rel="alternate" href="/atom.xml" title="🐕 @Leeifme" type="application/atom+xml" />




  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />






<meta name="description" content="OSI，TCP/IP，五层协议的体系结构，以及各层协议OSI 分层 （7 层）：物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP 分层（4 层）：网络接口层、 网际层、运输层、 应用层。  五层协议（5 层）：物理层、数据链路层、网络层、运输层、 应用层。  每一层的协议如下：  物理层：RJ45、CLOCK、IEEE802.3    （中继器，集线器，网关）  数据链路">
<meta name="keywords" content="面试整理">
<meta property="og:type" content="article">
<meta property="og:title" content="常见面试题整理——计算机网络">
<meta property="og:url" content="http://www.leeif.me/technology/collect/常见面试题整理——计算机网络/index.html">
<meta property="og:site_name" content="🐕 @Leeifme">
<meta property="og:description" content="OSI，TCP/IP，五层协议的体系结构，以及各层协议OSI 分层 （7 层）：物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP 分层（4 层）：网络接口层、 网际层、运输层、 应用层。  五层协议（5 层）：物理层、数据链路层、网络层、运输层、 应用层。  每一层的协议如下：  物理层：RJ45、CLOCK、IEEE802.3    （中继器，集线器，网关）  数据链路">
<meta property="og:image" content="http://images0.cnblogs.com/blog2015/621032/201508/092017231747399.jpg">
<meta property="og:updated_time" content="2017-07-20T19:39:53.116Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="常见面试题整理——计算机网络">
<meta name="twitter:description" content="OSI，TCP/IP，五层协议的体系结构，以及各层协议OSI 分层 （7 层）：物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP 分层（4 层）：网络接口层、 网际层、运输层、 应用层。  五层协议（5 层）：物理层、数据链路层、网络层、运输层、 应用层。  每一层的协议如下：  物理层：RJ45、CLOCK、IEEE802.3    （中继器，集线器，网关）  数据链路">
<meta name="twitter:image" content="http://images0.cnblogs.com/blog2015/621032/201508/092017231747399.jpg">



<script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Pisces',
    sidebar: {"position":"right","display":"post"},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: undefined,
      author: 'Author'
    }
  };
</script>




  <link rel="canonical" href="http://www.leeif.me/technology/collect/常见面试题整理——计算机网络/"/>

  <title> 常见面试题整理——计算机网络 | 🐕 @Leeifme </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="en">

  










  
  
    
  

  <div class="container one-collumn sidebar-position-right page-post-detail ">
    <div class="headband"></div>
    
    <header id="header_post" class="header" itemscope itemtype="http://schema.org/WPHeader" style="background-image: url('http://orj2jcr7i.bkt.clouddn.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.jpg');">
      <div class="header-inner-post"><a class="site-home" href="/">🐕 @Leeifme</a>

<div class="site-meta custom-logo">
  
  
  
    <div class="site-meta-headline">
      <a>
        <img class="custom-logo-image" src="/images/logo.png" style="width: 80px"
             alt="🐕 @Leeifme"/>
      </a>
    </div>
  

  
  
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        
        
           <li class="menu-item menu-item-about">
             <a href="/about" rel="section">
               
                 <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
               
               
               about
             </a>
           </li>
        
      
        
        
        
           <li class="menu-item menu-item-movie">
             <a href="/movie" rel="section">
               
                 <i class="menu-item-icon fa fa-fw fa-superscript"></i> <br />
               
               
               movie
             </a>
           </li>
        
      
        
        
        
           <li class="menu-item menu-item-coding">
             <a href="/categories/coding" rel="section">
               
                 <i class="menu-item-icon fa fa-fw fa-cogs"></i> <br />
               
               
               coding
             </a>
           </li>
        
      
        
        
        
           <li class="menu-item menu-item-archives">
             <a href="/archives" rel="section">
               
                 <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
               
               
               archives
             </a>
           </li>
        
      

      
        <li class="menu-item menu-item-search">
          
            <a href="javascript:;" class="popup-trigger">
          
            
              <i class="menu-item-icon fa fa-search fa-fw"></i> <br />
            
            Search
          </a>
        </li>
      
    </ul>
  

  
    <div class="site-search">
      
  <div class="popup">
 <input type="text" id="local-search-input">
 <span class="search-icon fa fa-search"></span>
 <div id="local-search-result"></div>
 <span class="popup-btn-close">close</span>
</div>


    </div>
  
</nav>

 </div>
      <div class="header-post"> 
  <div class="post-header">
      <div class="tags">
      
        <a href="/tags/面试整理/" rel="tag" title="面试整理">面试整理</a>
      
      </div>
      <h1>常见面试题整理——计算机网络</h1>
      <h2 class="subtitle"></h2>
      <div class="post-time">
        <span class="post-meta-item-text">Posted on </span>
        <time itemprop="dateCreated" datetime="2017-07-21T03:26:45+08:00" content="2017-07-21" title="2017-07-21 03:26:45">
          2017-07-21
        </time>
      </div>
  </div>
 </div>
    </header>


    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                常见面试题整理——计算机网络
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">Posted on</span>
            <time itemprop="dateCreated" datetime="2017-07-21T03:26:45+08:00" content="2017-07-21">
              2017-07-21
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">In</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/technology/" itemprop="url" rel="index">
                    <span itemprop="name">technology</span>
                  </a>
                </span>

                
                
                  , 
                

              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/technology/collect/" itemprop="url" rel="index">
                    <span itemprop="name">collect</span>
                  </a>
                </span>

                
                

              
            </span>
          

          <!-- 
            
           -->

          

          
          
             <span id="/technology/collect/常见面试题整理——计算机网络/" class="leancloud_visitors" data-flag-title="常见面试题整理——计算机网络">
               &nbsp; | &nbsp;
               <span class="post-meta-item-icon">
                 <i class="fa fa-eye"></i>
               </span>
               <span class="post-meta-item-text">visitors </span>
               <span class="leancloud-visitors-count"></span>
              </span>
          

          
              &nbsp; | &nbsp;
              <span class="page-pv"><i class="fa fa-eye"> </i>
              <span class="busuanzi-value" id="busuanzi_value_page_pv" ></span>
              </span>
          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <link rel="stylesheet" type="text/css" href="/assets/css/DPlayer.min.css"><script src="/assets/js/DPlayer.min.js"> </script><script src="/assets/js/APlayer.min.js"> </script><h2 id="OSI，TCP-IP，五层协议的体系结构，以及各层协议"><a href="#OSI，TCP-IP，五层协议的体系结构，以及各层协议" class="headerlink" title="OSI，TCP/IP，五层协议的体系结构，以及各层协议"></a>OSI，TCP/IP，五层协议的体系结构，以及各层协议</h2><p><strong>OSI 分层 （7 层）：</strong>物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。</p>
<p><strong>TCP/IP 分层（4 层）：</strong>网络接口层、 网际层、运输层、 应用层。 </p>
<p><strong>五层协议（5 层）：</strong>物理层、数据链路层、网络层、运输层、 应用层。 </p>
<p><strong>每一层的协议如下：</strong></p>
<ul>
<li>物理层：RJ45、CLOCK、IEEE802.3    （中继器，集线器，网关） </li>
<li>数据链路：PPP、FR、HDLC、VLAN、MAC  （网桥，交换机） </li>
<li>网络层：IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 （路由器） </li>
<li>传输层：TCP、UDP、SPX </li>
<li>会话层：NFS、SQL、NETBIOS、RPC </li>
<li>表示层：JPEG、MPEG、ASII </li>
<li>应用层：FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS </li>
</ul>
<p><strong>每一层的作用如下：</strong></p>
<ul>
<li><strong>物理层：</strong>通过媒介传输比特, 确定机械及电气规范（比特 Bit）  </li>
<li><strong>数据链路层</strong>：将比特组装成帧和点到点的传递（帧 Frame）  </li>
<li><strong>网络层</strong>：负责数据包从源到宿的传递和网际互连（包 PackeT）  </li>
<li><strong>传输层</strong>：提供端到端的可靠报文传递和错误恢复（段 Segment）  </li>
<li><strong>会话层</strong>：建立、管理和终止会话（会话协议数据单元 SPDU）  </li>
<li><strong>表示层</strong>：对数据进行翻译、加密和压缩（表示协议数据单元 PPDU）  </li>
<li><strong>应用层</strong>：允许访问 OSI 环境的手段（应用协议数据单元 APDU）  </li>
</ul>
<a id="more"></a>
<p><strong>IP 地址的分类</strong>  </p>
<p>   A 类地址：以 0 开头， 第一个字节范围：0~127（1.0.0.0 - 126.255.255.255）；  </p>
<p>   B 类地址：以 10 开头，    第一个字节范围：128~191（128.0.0.0 - 191.255.255.255）；  </p>
<p>   C 类地址：以 110 开头，  第一个字节范围：192~223（192.0.0.0 - 223.255.255.255）；  </p>
<p>​          10.0.0.0—10.255.255.255， 172.16.0.0—172.31.255.255， 192.168.0.0—192.168.255.255。（Internet 上保留地址用于内部）                                                                                                                                                                                      </p>
<p><strong>IP 地址与子网掩码相与得到主机号</strong>  </p>
<p><strong>ARP 是地址解析协议，简单语言解释一下工作原</strong>理</p>
<p>​    1：首先，每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表，以表示 IP 地址和 MAC 地址之间的对应关系。                              </p>
<p>​    2：当源主机要发送数据时，首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址，如果有，则直接发送数据，如果没有，就向本网段的所有主机发送 ARP 数据包，该数据包包括的内容有：<strong>源主机</strong>              <strong>                 IP 地址，源主机 MAC 地址，目的主机的 IP                                                </strong>              <strong> 地址</strong>。                              </p>
<p>​    3：当本网络的所有主机收到该 ARP 数据包时，首先检查数据包中的 IP 地址是否是自己的 IP 地址，如果不是，则忽略该数据包，如果是，则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中，如果已经存在，则覆盖，然后将自己的 MAC 地址写入 ARP 响应包中，告诉源主机自己是它想要找的 MAC 地址。                                                                                                              </p>
<p>​    4：源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表，并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包，表示 ARP 查询失败。                                                        </p>
<p>   广播发送 ARP 请求，单播发送 ARP 响应。      </p>
<p>​    <strong>各种协议</strong>  </p>
<p>​    <strong>       ICMP 协议：    </strong>因特网控制报文协议。它是 TCP/IP 协议族的一个子协议，用于在 IP 主机、路由器之间传递控制消息。      </p>
<p>​    <strong>      TFTP 协议：    </strong>是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议，提供不复杂、开销不大的文件传输服务。  </p>
<p>​    <strong>      HTTP 协议：    </strong>超文本传输协议，是一个属于应用层的面向对象的协议，由于其简捷、快速的方式，适用于分布式超媒体信息系统。  </p>
<p>​    <strong>      DHCP 协议：    </strong>动态主机配置协议，是一种让系统得以连接到网络上，并获取所需要的配置参数手段。  </p>
<p>​    <strong>NAT 协议</strong>：网络地址转换属接入广域网 (WAN) 技术，是一种将私有（保留）地址转化为合法 IP 地址的转换技术，  </p>
<p>​    <strong>DHCP 协议：</strong>一个局域网的网络协议，使用 UDP 协议工作，用途：给内部网络或网络服务供应商自动分配 IP 地址，给用户或者内部网络管理员作为对所有计算机作中央管理的手段。  </p>
<p>​          <strong>描述：RARP</strong>      </p>
<p>   RARP 是逆地址解析协议，作用是完成硬件地址到 IP 地址的映射，主要用于无盘工作站，因为给无盘工作站配置的 IP 地址不能保存。工作流程：在网络中配置一台 RARP 服务器，里面保存着 IP 地址和 MAC 地址的映射关系，当无盘工作站启动后，就封装一个 RARP 数据包，里面有其 MAC 地址，然后广播到网络上去，当服务器收到请求包后，就查找对应的 MAC 地址的 IP 地址装入响应报文中发回给请求者。因为需要广播请求报文，因此 RARP 只能用于具有广播能力的网络。                                                                                                              </p>
<h2 id="TCP-三次握手和四次挥手的全过程"><a href="#TCP-三次握手和四次挥手的全过程" class="headerlink" title="TCP 三次握手和四次挥手的全过程"></a>TCP 三次握手和四次挥手的全过程</h2><h3 id="三次握手"><a href="#三次握手" class="headerlink" title="三次握手"></a>三次握手</h3><p>  第一次握手：客户端发送 syn 包 (syn=x) 到服务器，并进入 SYN_SEND 状态，等待服务器确认； </p>
<p>  第二次握手：服务器收到 syn 包，必须确认客户的 SYN（ack=x+1），同时自己也发送一个 SYN 包（syn=y），即 SYN+ACK 包，此时服务器进入 SYN_RECV 状态； </p>
<p>  第三次握手：客户端收到服务器的 SYN＋ACK 包，向服务器发送确认包 ACK(ack=y+1)，此包发送完毕，客户端和服务器进入 ESTABLISHED 状态，完成三次握手。 </p>
<p>  握手过程中传送的包里不包含数据，三次握手完毕后，客户端与服务器才正式开始传送数据。理想状态下，TCP 连接一旦建立，在通信双方中的任何一方主动关闭连接之前，TCP 连接都将被一直保持下去。 </p>
<h3 id="四次握手"><a href="#四次握手" class="headerlink" title="四次握手"></a>四次握手</h3><p>  与建立连接的 “三次握手” 类似，断开一个 TCP 连接则需要“四次握手”。 </p>
<p>  第一次挥手：主动关闭方发送一个 FIN，用来关闭主动方到被动关闭方的数据传送，也就是主动关闭方告诉被动关闭方：我已经不  会再给你发数据了 (当然，在 fin 包之前发送出去的数据，如果没有收到对应的 ack 确认报文，主动关闭方依然会重发这些数据)，但是，此时主动关闭方还可  以接受数据。 </p>
<p>  第二次挥手：被动关闭方收到 FIN 包后，发送一个 ACK 给对方，确认序号为收到序号 + 1（与 SYN 相同，一个 FIN 占用一个序号）。<br>  第三次挥手：被动关闭方发送一个 FIN，用来关闭被动关闭方到主动关闭方的数据传送，也就是告诉主动关闭方，我的数据也发送完了，不会再给你发数据了。<br>  第四次挥手：主动关闭方收到 FIN 后，发送一个 ACK 给被动关闭方，确认序号为收到序号 + 1，至此，完成四次挥手。 </p>
<p>  <img src="http://images0.cnblogs.com/blog2015/621032/201508/092017231747399.jpg" alt="img"></p>
<h3 id="在浏览器中输入-www-baidu-com-后执行的全部过程"><a href="#在浏览器中输入-www-baidu-com-后执行的全部过程" class="headerlink" title="在浏览器中输入 www.baidu.com 后执行的全部过程"></a>在浏览器中输入 www.baidu.com 后执行的全部过程</h3><p>  1、客户端浏览器通过 DNS 解析到 www.baidu.com 的 IP 地址 220.181.27.48，通过这个 IP 地址找到客户端到服务器的路径。客户端浏览器发起一个 HTTP 会话到 220.161.27.48，然后通过 TCP 进行封装数据包，输入到网络层。 </p>
<p>  2、在客户端的传输层，把 HTTP 会话请求分成报文段，添加源和目的端口，如服务器使用 80 端口监听客户端的请求，客户端由系统随机选择一个端口如 5000，与服务器进行交换，服务器把相应的请求返回给客户端的 5000 端口。然后使用 IP 层的 IP 地址查找目的端。 </p>
<p>  3、客户端的网络层不用关系应用层或者传输层的东西，主要做的是通过查找路由表确定如何到达服务器，期间可能经过多个路由器，这些都是由路由器来完成的工作，我不作过多的描述，无非就是通过查找路由表决定通过那个路径到达服务器。 </p>
<p>  4、客户端的链路层，包通过链路层发送到路由器，通过邻居协议查找给定 IP 地址的 MAC 地址，然后发送 ARP 请求查找目的地址，如果得到回应后就可以使用 ARP 的请求应答交换的 IP 数据包现在就可以传输了，然后发送 IP 数据包到达服务器的地址。 </p>
<p>  <strong>    TCP 和 UDP 的区别？      </strong></p>
<p>  TCP 提供面向连接的、可靠的数据流传输，而 UDP 提供的是非面向连接的、不可靠的数据流传输。  </p>
<p>  TCP 传输单位称为 TCP 报文段，UDP 传输单位称为用户数据报。      </p>
<p>  TCP 注重数据安全性，UDP 数据传输快，因为不需要连接等待，少了许多操作，但是其安全性却一般。  </p>
<h2 id="TCP-对应的协议和-UDP-对应的协议"><a href="#TCP-对应的协议和-UDP-对应的协议" class="headerlink" title="TCP 对应的协议和 UDP 对应的协议"></a>TCP 对应的协议和 UDP 对应的协议</h2><h3 id="TCP-对应的协议"><a href="#TCP-对应的协议" class="headerlink" title="TCP 对应的协议"></a>TCP 对应的协议</h3><p>  （1） <strong>FTP</strong>：定义了文件传输协议，使用<strong> 21</strong> 端口。 </p>
<p>  （2） <strong>Telnet</strong>：一种用于远程登陆的端口，使用<strong> 23</strong> 端口，用户可以以自己的身份远程连接到计算机上，可提供基于 DOS 模式下的通信服务。 </p>
<p>  （3） <strong>SMTP</strong>：邮件传送协议，用于发送邮件。服务器开放的是<strong> 25</strong> 号端口。 </p>
<p>  （4） <strong>POP3</strong>：它是和 SMTP 对应，POP3 用于接收邮件。POP3 协议所用的是<strong> 110</strong> 端口。 </p>
<p>  （5）<strong>HTTP</strong>：是从 Web 服务器传输超文本到本地浏览器的传送协议。 </p>
<h3 id="UDP-对应的协议"><a href="#UDP-对应的协议" class="headerlink" title="UDP 对应的协议"></a>UDP 对应的协议</h3><p>  （1） <strong>DNS</strong>：用于域名解析服务，将域名地址转换为 IP 地址。DNS 用的是<strong> 53</strong> 号端口。 </p>
<p>  （2） <strong>SNMP</strong>：简单网络管理协议，使用<strong> 161</strong> 号端口，是用来管理网络设备的。由于网络设备很多，无连接的服务就体现出其优势。 </p>
<p>  （3）<strong> TFTP</strong>(Trival File Tran 敏感词 er  Protocal)，简单文件传输协议，该协议在熟知端口<strong> 69</strong> 上使用 UDP 服务。 </p>
<p>  <strong>    DNS 域名系统，简单描述其工作原理。  </strong></p>
<p>  当 DNS 客户机需要在程序中使用名称时，它会查询 DNS 服务器来解析该名称。客户机发送的每条查询信息包括三条信息：包括：指定的 DNS 域名，指定的查询类型，DNS 域名的指定类别。基于 UDP 服务，端口 53. 该应用一般不直接为用户使用，而是为其他应用服务，如 HTTP，SMTP 等在其中需要完成主机名到 IP 地址的转换。                                                                        </p>
<p><strong>面向连接和非面向连接的服务的特点是什么？</strong></p>
<p>  面向连接的服务，通信双方在进行通信之前，要先在双方建立起一个完整的可以彼此沟通的通道，在通信过程中，整个连接的情况一直可以被实时地监控和管理。 </p>
<p>  非面向连接的服务，不需要预先建立一个联络两个通信节点的连接，需要通信的时候，发送节点就可以往网络上发送信息，让信息自主地在网络上去传，一般在传输的过程中不再加以监控。</p>
<p><strong>TCP 的三次握手过程？为什么会采用三次握手，若采用二次握手可以吗？</strong></p>
<p>  答：建立连接的过程是利用客户服务器模式，假设主机 A 为客户端，主机 B 为服务器端。  </p>
<p>  （1）TCP 的三次握手过程：主机 A 向 B 发送连接请求；主机 B 对收到的主机 A 的报文段进行确认；主机 A 再次对主机 B 的确认进行确认。                                                        </p>
<p>  （2）采用三次握手是为了防止失效的连接请求报文段突然又传送到主机 B，因而产生错误。失效的连接请求报文段是指：主机 A 发出的连接请求没有收到主机 B 的确认，于是经过一段时间后，主机 A 又重新向主机 B 发送连接请求，且建立成功，顺序完成数据传输。考虑这样一种特殊情况，主机 A 第一次发送的连接请求并没有丢失，而是因为网络节点导致延迟达到主机 B，主机 B 以为是主机 A 又发起的新连接，于是主机 B 同意连接，并向主机 A 发回确认，但是此时主机 A 根本不会理会，主机 B 就一直在等待主机 A 发送数据，导致主机 B 的资源浪费。                                                                                                                                                                                                                                                </p>
<p>  （3）采用两次握手不行，原因就是上面说的实效的连接请求的特殊情况。</p>
<p>  <strong>端口及对应的服务：</strong></p>
<table>
<thead>
<tr>
<th>服务</th>
<th>端口号</th>
<th>服务</th>
<th>端口号</th>
</tr>
</thead>
<tbody>
<tr>
<td>FTP</td>
<td>21</td>
<td>SSH</td>
<td>22</td>
</tr>
<tr>
<td>telnet</td>
<td>23</td>
<td>SMTP</td>
<td>25</td>
</tr>
<tr>
<td>Domain(域名服务器)</td>
<td>53</td>
<td>HTTP</td>
<td>80</td>
</tr>
<tr>
<td>POP3</td>
<td>110</td>
<td>NTP（网络时间协议）</td>
<td>123</td>
</tr>
<tr>
<td>MySQL 数据库服务</td>
<td>3306</td>
<td>Shell 或 cmd</td>
<td>514</td>
</tr>
<tr>
<td>POP-2</td>
<td>109</td>
<td>SQL Server</td>
<td>1433</td>
</tr>
</tbody>
</table>
<p><strong>IP 数据包的格式</strong></p>
<p>   IP 数据报由<strong>首部</strong> 和<strong>数据</strong>     两部分组成。首部由<strong>固定部分和可选部分</strong>       组成。<strong>首部的固定部分有</strong>        <strong>           20        </strong>        <strong> 字节</strong>。可选部分的长度变化范围为 1——40 字节。固定部分的字段：                    </p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>位数（bit）</th>
<th>字段名</th>
<th>位数</th>
</tr>
</thead>
<tbody>
<tr>
<td>版本</td>
<td>4  Ipv4</td>
<td>首部长度</td>
<td>4（表示的最大数为 15 个单位，一个单位表示 4 字节）</td>
</tr>
<tr>
<td>服务类型</td>
<td>8  以前很少用</td>
<td>总长度</td>
<td>16 （首部和数据部分的总长度，因此数据报的最大长度为 65535 字节，即 64KB，但是由于链路层的 MAC 都有一定的最大传输单元，因此 IP 数据报的长度一般都不会有理论上的那么大，如果超出了 MAC 的最大单元就会进行分片）</td>
</tr>
<tr>
<td>标识</td>
<td>16 （相同的标识使得分片后的数据报片能正确的重装成原来的数据报）</td>
<td>标志</td>
<td>3 （最低位 MF=1 表示后面还有分片，MF=0 表示这是若干个数据报片的最后一个中间位 DF=0 才允许分片）</td>
</tr>
<tr>
<td>片偏移</td>
<td>片偏移指出较长的分组在分片后，某片在原分组中的相对位置，都是 8 字节的偏移位置</td>
<td>生存时间</td>
<td>数据报在网络中的生存时间，指最多经过路由器的跳数</td>
</tr>
<tr>
<td>协议</td>
<td>8 （指出该数据报携带的数据是何种协议，以使得目的主机的 IP 层知道应将数据部分上交给哪个处理程序）如 ICMP=1                IGMP=2 TCP=6 EGP=8 IGP=9 UDP=17 Ipv6=41 OSPF=89</td>
<td>首部校验和</td>
<td>这个部分只校验首部，不包括数据部分，计算方法：将首部划分为多个 16 位的部分，然后每个 16 位部分取反，然后计算和，再将和取反放到首部校验和。接收方收到后按同样的方法划分，取反，求和，在取反，如果结果为零，则接收，否则就丢弃</td>
</tr>
<tr>
<td>源地址</td>
<td>32</td>
<td>目的地址</td>
<td>32</td>
</tr>
</tbody>
</table>
<p><strong>TCP 数据报的格式</strong></p>
<p>  一个 TCP 报文段分为首部和数据两部分。首部由固定部分和选项部分组成，固定部分是 20 字节。TCP 首部的最大长度为 60。首部固定部分字段：            </p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>字节（Byte）</th>
<th>字段名</th>
<th>字节（Byte）</th>
</tr>
</thead>
<tbody>
<tr>
<td>源端口</td>
<td>2</td>
<td>目的端口</td>
<td>2</td>
</tr>
<tr>
<td>序号</td>
<td>4</td>
<td>确认号</td>
<td>4，是期望收到对方的下一个报文段的数据的第一个字节的序号</td>
</tr>
<tr>
<td>数据偏移</td>
<td>4bit 指出 TCP 报文段的数据起始处距离 TCP 报文段的起始有多远</td>
<td>保留</td>
<td>6bit</td>
</tr>
<tr>
<td>紧急比特 URG</td>
<td></td>
<td>确认比特 ACK</td>
<td>只有当 ACK=1 时，确认号字段才有效</td>
</tr>
<tr>
<td>推送比特 PSH</td>
<td></td>
<td>复位比特 RST</td>
<td></td>
</tr>
<tr>
<td>同步比特 SYN</td>
<td></td>
<td>终止比特 FIN</td>
<td></td>
</tr>
<tr>
<td>窗口</td>
<td>2</td>
<td>检验和</td>
<td>2 （包括首部和数据两部分，同时还要加 12 字节的伪首部进行校验和计算）</td>
</tr>
<tr>
<td>选项</td>
<td>长度可变（范围 1——40）</td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>TCP 的 12 字节伪首部：</strong></p>
<table>
<thead>
<tr>
<th>源 IP 地址（4）</th>
<th>目的 IP 地址（4）</th>
<th>0 (1)</th>
<th>6(1) 代表这是 TCP，IP 协议中提到过</th>
<th>TCP 长度（2）</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>TCP 数据报的格式:</strong></p>
<p>  用户数据报 UDP 由首部和数据部分组成。首部只有 8 个字节，由 4 个字段组成，每个字段都是两个字节。      </p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>字节</th>
<th>字段名</th>
<th>字节</th>
</tr>
</thead>
<tbody>
<tr>
<td>源端口</td>
<td>2</td>
<td>目的端口</td>
<td>2</td>
</tr>
<tr>
<td>长度</td>
<td>2</td>
<td>检验和</td>
<td>2 （检验首部和数据，加 12 字节的伪首部）</td>
</tr>
</tbody>
</table>
<p><strong>UDP 的 12 字节伪首部：</strong></p>
<table>
<thead>
<tr>
<th>源 IP 地址（4）</th>
<th>目的 IP 地址（4）</th>
<th>0 (1)</th>
<th>17(1) 代表这是 UDP</th>
<th>UDP 长度（2）</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>以太网 MAC 帧格式:</strong></p>
<table>
<thead>
<tr>
<th>前导码</th>
<th>前定界符</th>
<th>目的地址</th>
<th>源目的地址</th>
<th>长度字段</th>
<th>数据字段</th>
<th>校验字段</th>
</tr>
</thead>
<tbody>
<tr>
<td>7B</td>
<td>1B</td>
<td>6B</td>
<td>6B</td>
<td>2B</td>
<td>46-1500</td>
<td>4B</td>
</tr>
</tbody>
</table>
<h2 id="交换机、路由器、网关的概念，并知道各自的用途"><a href="#交换机、路由器、网关的概念，并知道各自的用途" class="headerlink" title="交换机、路由器、网关的概念，并知道各自的用途"></a>交换机、路由器、网关的概念，并知道各自的用途</h2><h3 id="交换机"><a href="#交换机" class="headerlink" title="交换机"></a>交换机</h3><p>​    在计算机网络系统中，交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背    部总线上，当控制电路收到数据包以后，处理端口会查找内存中的地址对照表以确定目的 MAC（网卡的硬件地址）的 NIC（网卡）挂接在哪个端口上，通过内部    交换矩阵迅速将数据包传送到目的端口。目的 MAC 若不存在，交换机才广播到所有的端口，接收端口回应后交换机会 “学习” 新的地址，并把它添加入内部地址表中。  </p>
<p>​    交换机工作于 OSI 参考模型的第二层，即数据链路层。交换机内部的 CPU 会在每个端口成功连接时，通过 ARP 协议学习它的 MAC 地址，保存成一张    ARP 表。在今后的通讯中，发往该 MAC 地址的数据包将仅送往其对应的端口，而不是所有的端口。因此，交换机可用于划分数据链路层广播，即冲突域；但它不    能划分网络层广播，即广播域。  </p>
<p>   交换机被广泛应用于二层网络交换，俗称 “二层交换机”。  </p>
<p>​    交换机的种类有：二层交换机、三层交换机、四层交换机、七层交换机分别工作在 OSI 七层模型中的第二层、第三层、第四层盒第七层，并因此而得名。  </p>
<h3 id="路由器"><a href="#路由器" class="headerlink" title="路由器"></a>路由器</h3><p>​    <strong>路由器</strong>（<strong>Router</strong>）是一种计算机网络设备，提供了路由与转送两种重要机制，可以决定数据包从来源端到目的端所经过    的路由路径（host 到 host 之间的传输路径），这个过程称为路由；将路由器输入端的数据包移送至适当的路由器输出端 (在路由器内部进行)，这称为转    送。路由工作在 OSI 模型的第三层——即网络层，例如网际协议。  </p>
<p>​    <strong>路由器的一个作用是连通不同的网络，另一个作用是选择信息传送的线路。</strong> 路由器与交换器的差别，路由器是属于 OSI 第三层的产品，交换器是 OSI 第二层的产品 (这里特指二层交换机)。  </p>
<h3 id="网关"><a href="#网关" class="headerlink" title="网关"></a>网关</h3><p>​    <strong>网关</strong>（Gateway），<strong>网关</strong>顾名思义就是连接两个网络的设备，区别于路由器（由于历史的原因，许多有关 TCP/IP    的文献曾经把网络层使用的路由器（Router）称为网关，在今天很多局域网采用都是路由来接入网络，因此现在通常指的网关就是路由器的 IP），经常在家    庭中或者小型企业网络中使用，用于连接局域网和 Internet。 网关也经常指把一种协议转成另一种协议的设备，比如语音网关。  </p>
<p>​    在传统 TCP/IP 术语中，网络设备只分成两种，一种为网关（gateway），另一种为主机（host）。网关能在网络间转递数据包，但主机不能    转送数据包。在主机（又称终端系统，end system）中，数据包需经过 TCP/IP 四层协议处理，但是在网关（又称中介系    统，intermediate system）只需要到达网际层（Internet layer），决定路径之后就可以转送。在当时，网关    （gateway）与路由器（router）还没有区别。  </p>
<p>​    在现代网络术语中，网关（gateway）与路由器（router）的定义不同。网关（gateway）能在不同协议间移动数据，而路由器（router）是在不同网络间移动数据，相当于传统所说的 IP 网关（IP gateway）。  </p>
<p>​    <strong>网关</strong>是连接两个网络的设备，对于语音网关来说，他可以连接 PSTN 网络和以太网，这就相当于 VOIP，把不同电话中的模拟信号通过网关而转换成数字信号，而且加入协议再去传输。在到了接收端的时候再通过<strong>网关</strong>还原成模拟的电话信号，最后才能在电话机上听到。  </p>
<p>​    对于以太网中的<strong>网关</strong>只能转发三层以上数据包，这一点和路由是一样的。而不同的是<strong>网关</strong>中并没有路由表，他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射，子网内用户在外网看来只是外网的 IP 地址对应着不同的端口，这样看来就会保护子网内的用户。</p>

      
    </div>


    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/面试整理/" rel="tag">#面试整理</a>
          
        </div>
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/technology/collect/常见排序算法/" rel="next" title="常见排序算法">
                <i class="fa fa-chevron-left"></i> 常见排序算法
              </a>
            
          </div>

          <div class="post-nav-prev post-nav-item">
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>

          
          </div>
          


          
  <div class="comments" id="comments">
    
      <div id="hypercomments_widget"></div>
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      
      
        
          <ul class="sidebar-nav motion-element">
            <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
              Table of Contents
            </li>
            <li class="sidebar-nav-overview" data-target="site-overview">
              Overview
            </li>
          </ul>
        
      



      <section class="site-overview sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/images/avatar.jpg"
               alt="睡沙发的沙皮狗" />
          <p class="site-author-name" itemprop="name">睡沙发的沙皮狗</p>
           
              <p class="site-description motion-element" itemprop="description">睡沙发的沙皮狗 Leeifme</p>
          
        </div>
        <nav class="site-state motion-element">

          
            <div class="site-state-item site-state-posts">
              <a href="/archives">
                <span class="site-state-item-count">17</span>
                <span class="site-state-item-name">posts</span>
              </a>
            </div>
          

          
            
            
            <div class="site-state-item site-state-categories">
              
                <span class="site-state-item-count">12</span>
                <span class="site-state-item-name">categories</span>
              
            </div>
          

          
            
            
            <div class="site-state-item site-state-tags">
              
                <span class="site-state-item-count">12</span>
                <span class="site-state-item-name">tags</span>
              
            </div>
          

        </nav>

        
          <div class="feed-link motion-element">
            <a href="/atom.xml" rel="alternate">
              <i class="fa fa-rss"></i>
              RSS
            </a>
          </div>
        

        <div class="links-of-author motion-element">
          
            
              <span class="links-of-author-item">
                <a href="https://github.com/leeifme" target="_blank" title="GitHub">
                  
                    <i class="fa fa-fw fa-github"></i>
                  
                  GitHub
                </a>
              </span>
            
              <span class="links-of-author-item">
                <a href="http://weibo.com/5406937103/profile?topnav=1&wvr=6" target="_blank" title="微博">
                  
                    <i class="fa fa-fw fa-weibo"></i>
                  
                  微博
                </a>
              </span>
            
          
        </div>

        
        
          <div class="cc-license motion-element" itemprop="license">
            <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" class="cc-opacity" target="_blank">
              <img src="/images/cc-by-nc-sa.svg" alt="Creative Commons" />
            </a>
          </div>
        

        
        

        


      </section>
      
        
        <!--noindex-->
          <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
            <div class="post-toc">

              
                
              

              
                <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#OSI，TCP-IP，五层协议的体系结构，以及各层协议"><span class="nav-number">1.</span> <span class="nav-text">OSI，TCP/IP，五层协议的体系结构，以及各层协议</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#TCP-三次握手和四次挥手的全过程"><span class="nav-number">2.</span> <span class="nav-text">TCP 三次握手和四次挥手的全过程</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#三次握手"><span class="nav-number">2.1.</span> <span class="nav-text">三次握手</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#四次握手"><span class="nav-number">2.2.</span> <span class="nav-text">四次握手</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#在浏览器中输入-www-baidu-com-后执行的全部过程"><span class="nav-number">2.3.</span> <span class="nav-text">在浏览器中输入 www.baidu.com 后执行的全部过程</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#TCP-对应的协议和-UDP-对应的协议"><span class="nav-number">3.</span> <span class="nav-text">TCP 对应的协议和 UDP 对应的协议</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#TCP-对应的协议"><span class="nav-number">3.1.</span> <span class="nav-text">TCP 对应的协议</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#UDP-对应的协议"><span class="nav-number">3.2.</span> <span class="nav-text">UDP 对应的协议</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#交换机、路由器、网关的概念，并知道各自的用途"><span class="nav-number">4.</span> <span class="nav-text">交换机、路由器、网关的概念，并知道各自的用途</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#交换机"><span class="nav-number">4.1.</span> <span class="nav-text">交换机</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#路由器"><span class="nav-number">4.2.</span> <span class="nav-text">路由器</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#网关"><span class="nav-number">4.3.</span> <span class="nav-text">网关</span></a></li></ol></li></ol></div>
              

            </div>
          </section>
        <!--/noindex-->
        
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2017</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">睡沙发的沙皮狗</span>
</div>

<div class="powered-by">
  Powered by <a class="theme-link" href="http://hexo.io">Hexo</a>
</div>

<div class="theme-info">
  Theme -
  <a class="theme-link" href="https://github.com/zproo/hexo-blog">
    Next
  </a>
</div>

        

<div class="busuanzi-count">

  <script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>

  
    <span class="site-uv"><i class="fa fa-user"></i><span class="busuanzi-value" id="busuanzi_value_site_uv"></span></span>
  

  
    <span class="site-pv"><i class="fa fa-eye"> </i><span class="busuanzi-value" id="busuanzi_value_site_pv"></span></span>
  
  
</div>



        
      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  




  



  
  <script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>

  
  <script type="text/javascript" src="/lib/canvas-ribbon/canvas-ribbon.js"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.0.1"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.0.1"></script>



  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.0.1"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.0.1"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.0.1"></script>



  



  





	

		<script type="text/javascript">
		_hcwp = window._hcwp || [];

		_hcwp.push({widget:"Bloggerstream", widget_id: 92841, selector:".hc-comment-count", label: "{\%COUNT%\}" });

		
		_hcwp.push({widget:"Stream", widget_id: 92841, xid: "technology/collect/常见面试题整理——计算机网络/"});
		

		(function() {
		if("HC_LOAD_INIT" in window)return;
		HC_LOAD_INIT = true;
		var lang = (navigator.language || navigator.systemLanguage || navigator.userLanguage || "en").substr(0, 2).toLowerCase();
		var hcc = document.createElement("script"); hcc.type = "text/javascript"; hcc.async = true;
		hcc.src = ("https:" == document.location.protocol ? "https" : "http")+"://w.hypercomments.com/widget/hc/92841/"+lang+"/widget.js";
		var s = document.getElementsByTagName("script")[0];
		s.parentNode.insertBefore(hcc, s.nextSibling);
		})();
		</script>

	







  
  
  <script type="text/javascript">
    // Popup Window;
    var isfetched = false;
    // Search DB path;
    var search_path = "search.xml";
    if (search_path.length == 0) {
       search_path = "search.xml";
    }
    var path = "/" + search_path;
    // monitor main search box;

    function proceedsearch() {
      $("body").append('<div class="popoverlay">').css('overflow', 'hidden');
      $('.popup').fadeToggle();

    }
    // search function;
    var searchFunc = function(path, search_id, content_id) {
    'use strict';
    $.ajax({
        url: path,
        dataType: "xml",
        async: true,
        success: function( xmlResponse ) {
            // get the contents from search data
            isfetched = true;
            $('.popup').detach().appendTo('.header-inner');
            var datas = $( "entry", xmlResponse ).map(function() {
                return {
                    title: $( "title", this ).text(),
                    content: $("content",this).text(),
                    url: $( "url" , this).text()
                };
            }).get();
            var $input = document.getElementById(search_id);
            var $resultContent = document.getElementById(content_id);
            $input.addEventListener('input', function(){
                var matchcounts = 0;
                var str='<ul class=\"search-result-list\">';
                var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);
                $resultContent.innerHTML = "";
                if (this.value.trim().length > 1) {
                // perform local searching
                datas.forEach(function(data) {
                    var isMatch = true;
                    var content_index = [];
                    var data_title = data.title.trim().toLowerCase();
                    var data_content = data.content.trim().replace(/<[^>]+>/g,"").toLowerCase();
                    var data_url = data.url;
                    var index_title = -1;
                    var index_content = -1;
                    var first_occur = -1;
                    // only match artiles with not empty titles and contents
                    if(data_title != '' && data_content != '') {
                        keywords.forEach(function(keyword, i) {
                            index_title = data_title.indexOf(keyword);
                            index_content = data_content.indexOf(keyword);
                            if( index_title < 0 && index_content < 0 ){
                                isMatch = false;
                            } else {
                                if (index_content < 0) {
                                    index_content = 0;
                                }
                                if (i == 0) {
                                    first_occur = index_content;
                                }
                            }
                        });
                    }
                    // show search results
                    if (isMatch) {
                        matchcounts += 1;
                        str += "<li><a href='"+ decodeURIComponent(data_url) +"' class='search-result-title'>"+ data_title +"</a>";
                        var content = data.content.trim().replace(/<[^>]+>/g,"");
                        if (first_occur >= 0) {
                            // cut out 100 characters
                            var start = first_occur - 20;
                            var end = first_occur + 80;
                            if(start < 0){
                                start = 0;
                            }
                            if(start == 0){
                                end = 50;
                            }
                            if(end > content.length){
                                end = content.length;
                            }
                            var match_content = content.substring(start, end);
                            // highlight all keywords
                            keywords.forEach(function(keyword){
                                var regS = new RegExp(keyword, "gi");
                                match_content = match_content.replace(regS, "<b class=\"search-keyword\">"+keyword+"</b>");
                            });

                            str += "<p class=\"search-result\">" + match_content +"...</p>"
                        }
                        str += "</li>";
                    }
                })};
                str += "</ul>";
                if (matchcounts == 0) { str = '<div id="no-result"><i class="fa fa-frown-o fa-5x" /></div>' }
                if (keywords == "") { str = '<div id="no-result"><i class="fa fa-search fa-5x" /></div>' }
                $resultContent.innerHTML = str;
            });
            proceedsearch();
        }
    });}

    // handle and trigger popup window;
    $('.popup-trigger').click(function(e) {
      e.stopPropagation();
      if (isfetched == false) {
        searchFunc(path, 'local-search-input', 'local-search-result');
      } else {
        proceedsearch();
      };

    });

    $('.popup-btn-close').click(function(e){
      $('.popup').fadeOut(function() {
          $(".popoverlay").remove();
          $('body').css('overflow', '');
      });
    });
    $('.popup').click(function(e){
      e.stopPropagation();
    });
  </script>


  

  

  
  <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script>
  <script>AV.initialize("6mFxqINb4RcjTGhNbtCzfWI1-gzGzoHsz", "c4qK91bIu9qFdGeimnKdriiK");</script>
  <script>
    function showTime(Counter) {
      var query = new AV.Query(Counter);
      var entries = [];
      var $visitors = $(".leancloud_visitors");

      $visitors.each(function () {
        entries.push( $(this).attr("id").trim() );
      });

      query.containedIn('url', entries);
      query.find()
        .done(function (results) {
          var COUNT_CONTAINER_REF = '.leancloud-visitors-count';

          if (results.length === 0) {
            $visitors.find(COUNT_CONTAINER_REF).text(0);
            return;
          }

          for (var i = 0; i < results.length; i++) {
            var item = results[i];
            var url = item.get('url');
            var time = item.get('time');
            var element = document.getElementById(url);

            $(element).find(COUNT_CONTAINER_REF).text(time);
          }
          for(var i = 0; i < entries.length; i++) {
            var url = entries[i];
            var element = document.getElementById(url);
            var countSpan = $(element).find(COUNT_CONTAINER_REF);
            if( countSpan.text() == '') {
              countSpan.text(0);
            }
          }
        })
        .fail(function (object, error) {
          console.log("Error: " + error.code + " " + error.message);
        });
    }

    function addCount(Counter) {
      var $visitors = $(".leancloud_visitors");
      var url = $visitors.attr('id').trim();
      var title = $visitors.attr('data-flag-title').trim();
      var query = new AV.Query(Counter);

      query.equalTo("url", url);
      query.find({
        success: function(results) {
          if (results.length > 0) {
            var counter = results[0];
            counter.fetchWhenSave(true);
            counter.increment("time");
            counter.save(null, {
              success: function(counter) {
                var $element = $(document.getElementById(url));
                $element.find('.leancloud-visitors-count').text(counter.get('time'));
              },
              error: function(counter, error) {
                console.log('Failed to save Visitor num, with error message: ' + error.message);
              }
            });
          } else {
            var newcounter = new Counter();
            /* Set ACL */
            var acl = new AV.ACL();
            acl.setPublicReadAccess(true);
            acl.setPublicWriteAccess(true);
            newcounter.setACL(acl);
            /* End Set ACL */
            newcounter.set("title", title);
            newcounter.set("url", url);
            newcounter.set("time", 1);
            newcounter.save(null, {
              success: function(newcounter) {
                var $element = $(document.getElementById(url));
                $element.find('.leancloud-visitors-count').text(newcounter.get('time'));
              },
              error: function(newcounter, error) {
                console.log('Failed to create');
              }
            });
          }
        },
        error: function(error) {
          console.log('Error:' + error.code + " " + error.message);
        }
      });
    }

    $(function() {
      var Counter = AV.Object.extend("Counter");
      if ($('.leancloud_visitors').length == 1) {
        addCount(Counter);
      } else if ($('.post-title-link').length > 1) {
        showTime(Counter);
      }
    });
  </script>



  
<script type="text/javascript" async src="//push.zhanzhang.baidu.com/push.js">
</script>


</body>
</html>
